में डबल-प्रकार डेटा (जियोलोकेशन) बचत मेरी MySQL डेटाबेस में दोगुना हो जाता है के रूप में मैं जियोलोकेशन डेटा भंडारण के लिये दो क्षेत्रों, परिभाषित किया गया है:अजीब मूल्य परिवर्तन जब डेटाबेस
`address_geo_latitude` float(10,6) NOT NULL,
`address_geo_longitude` float(10,6) NOT NULL
और मैं उपयोग कर रहा हूँ Yii2 के उपयोगकर्ता द्वारा पारित मूल्यों पर double
सत्यापनकर्ता:
public function rules()
{
return [
[['address_geo_latitude', 'address_geo_longitude'], 'double', 'min'=>0, 'max'=>360]
];
}
परीक्षण I'v के दौरान (हालांकि मेरे परीक्षण साबित हो सकता है, इस मुद्दे Yii2 प्रमाणकों के साथ कोई संबंध नहीं है कि लगता है) ई मनाया अजीब मूल्यों के परिवर्तन, यानी (?):
359.90
359.899994
(0,000006
अंतर) हो जाता है,359.80
359.799988
हो जाता है (0,000012
अंतर),311.11
311.109985
(0,000015
अंतर) हो जाता है,255.55
255.550003
(-0,000003
अंतर) बन गया,205.205
हो जाता है205.205002
(-0,000002
अंतर),105.105
105.105003
(-0,000003
अंतर) हो जाता है।
लेकिन:
359.899994
359.899994
बनी हुई है,311.109985
रहता311.109985
,311
रहता311
,255
रहता255
,200
अवशेष200
,75.75
75.75
बनी हुई है,11.11
11.11
बनी हुई है।
मुझे क्या याद आ रही है? मैं इनके पीछे कोई पैटर्न या तर्क नहीं देख सकता।
क्या यह है, क्योंकि मेरे पास इस प्रकार के डेटा के लिए गलत MySQL फ़ील्ड घोषणा है? यदि हां, तो सही क्या है? कुछ अलग जवाब:
- Database/SQL: How to store longitude/latitude data?
- What datatype to use when storing latitude and longitude data in SQL databases?
- What is the ideal data type to use when storing latitude/longitudes in a MySQL database?
पता चलता है, कि float(10,6)
उपयोग करते हुए, सबसे अच्छा विकल्प है यदि MySQL के spatial extensions का उपयोग नहीं।
print_r(Yii::$app->request->post()); //Correct!
print_r($lab->address_geo_latitude); //Correct!
if ($lab->load(Yii::$app->request->post(), 'Lab') && $lab->save()) {
print_r($lab->address_geo_latitude); //Correct!
$lab2 = $this->findModel($lab->id);
print_r($lab2->address_geo_latitude); //<-- HERE! Incorrect!
}
मेरा प्रश्न this one के विपरीत पर है: क्योंकि मूल्य जब तक डेटाबेस से फिर से पढ़ सही रहता है
मेरे परीक्षण, साबित हो सकता है, इस मुद्दे Yii2 प्रमाणकों के साथ कोई संबंध नहीं है कि लगता है। मेरी संख्या लाभ, हार नहीं, सटीकता! और केवल कुछ संख्याओं के लिए, हमेशा नहीं।
* mysql * में फिर से सही होने के बाद मान सही हैं? – Tony
@ टोनी क्षमा करें, मैं आपके प्रश्न को समझ नहीं पा रहा हूं, क्योंकि मैंने कभी दूसरी बचत के बारे में कुछ भी नहीं कहा, केवल दूसरे पढ़ने के बारे में (पुनः पढ़ा गया)। हां, 'address_geo_latitude' कॉलम में' 311.109985' मान को वास्तव में स्टोर/रखने के लिए '$ model-> save_) 'value_geo_latitude = 311.11' के रूप में सहेजा गया' $ model-> save()' मान के तुरंत बाद। – trejder