मुझे अजीब त्रुटि संदेश मिला जब Django के Cort_user मॉडल के लिए first_name, last_name को बचाने का प्रयास किया गया।
असफल उदाहरण
user = User.object.create_user(username, email, password)
user.first_name = u'Rytis'
user.last_name = u'Slatkevičius'
user.save()
>>> Incorrect string value: '\xC4\x8Dius' for column 'last_name' at row 104
user.first_name = u'Валерий'
user.last_name = u'Богданов'
user.save()
>>> Incorrect string value: '\xD0\x92\xD0\xB0\xD0\xBB...' for column 'first_name' at row 104
user.first_name = u'Krzysztof'
user.last_name = u'Szukiełojć'
user.save()
>>> Incorrect string value: '\xC5\x82oj\xC4\x87' for column 'last_name' at row 104
सफल उदाहरण
user.first_name = u'Marcin'
user.last_name = u'Król'
user.save()
>>> SUCCEED
MySQL सेटिंग्स
mysql> show variables like 'char%';
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | utf8 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | utf8 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)
टेबल चारसेट और कॉलेशन
सारणी__erer utf8_general_ci कोलेशन के साथ utf-8 charset है।
UPDATE कमांड के परिणाम
जब UPDATE कमांड का उपयोग करके इसे ऊपर से मान_user तालिका में अद्यतन करते समय कोई त्रुटि नहीं हुई।
mysql> update auth_user set last_name='Slatkevičiusa' where id=1;
Query OK, 1 row affected, 1 warning (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0
mysql> select last_name from auth_user where id=100;
+---------------+
| last_name |
+---------------+
| Slatkevi?iusa |
+---------------+
1 row in set (0.00 sec)
PostgreSQL
ऊपर सूचीबद्ध विफल मानों को पोस्टग्रेएसक्यूएल टेबल में अद्यतन किया जा सकता है जब मैंने डेटाबेस बैकएंड को जोंगो में स्विच किया था। यह बहुत अजीब है।
mysql> SHOW CHARACTER SET;
+----------+-----------------------------+---------------------+--------+
| Charset | Description | Default collation | Maxlen |
+----------+-----------------------------+---------------------+--------+
...
| utf8 | UTF-8 Unicode | utf8_general_ci | 3 |
...
लेकिन http://www.postgresql.org/docs/8.1/interactive/multibyte.html से , मुझे निम्नलिखित मिला:
Name Bytes/Char
UTF8 1-4
क्या इसका मतलब है कि यूनीकोड चार में अधिकतम 4 बाइट्स की पोस्टग्रेसीक्यूएल है, लेकिन माईएसक्यूएल में 3 बाइट्स जो कि त्रुटि के कारण हुए?