我对如何在其中存储带有不寻常字符(对于习惯于处理英国英语字符集的人)的字符串感到非常困惑和困惑。
这是我的例子。
我有这个名字:Bientôt l'été
这就是我创建表的方式:
CREATE TABLE MyTable(
'my_id' INT(10) unsigned NOT NULL,
'my_name' TEXT CHARACTER SET utf8 NOT NULL,
PRIMARY KEY(`my_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
使用这个简化的 python 脚本,我试图将字符串插入到 MySQL 数据库和表中:
#!/usr/bin/python
# -*- coding: utf-8 -*-
import MySQLdb
mystring = "Bientôt l'été"
myinsert = [ { "name" : mystring.encode("utf-8").strip()[:65535], "id" : 1 } ]
con = None
con = MySQLdb.connect('localhost', 'abc', 'def', 'ghi');
cur = con.cursor()
sql = "INSERT INTO 'MyTable' ( 'my_id', 'my_name' ) VALUES ( %(id)s, %(name)s ) ; "
cur.executemany( sql, myinsert )
con.commit()
if con: con.close()
如果我然后尝试读取数据库中的名称,它将存储为:Bientôt l'été
我希望它阅读:Bientôt l'été
如何让 python 脚本/MySQL 数据库执行此操作?我认为这与字符集及其设置方式有关,但我找不到一个简单的网页来解释这一点而无需任何技术术语。我已经为此苦苦挣扎了好几个小时!
我看过这个,我看到character_set_server
设置为,latin1
但我不知道这是否是问题或如何改变它:
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 | latin1 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+