mysql在uft-8 unicode中插入错误

时间:2010-12-17 15:05:56

标签: mysql unicode utf-8

我想插入一些简单的数据 查询是: INSERT INTO categories_lang(category_id,language_id,name,description,alias)VALUES(7,'nl','éésgdsfgsdfgdfsgë','','') 查询是正确的 当我插入普通字符(没有像ë和é这样的法国东西)时它会起作用。 但是当我这样做时,查询会在表格中插入一个空的描述字段。

当我在heidsql中运行查询时,它确实有效。

这里有什么不妥?

由于

2 个答案:

答案 0 :(得分:2)

在执行查询之前,请将此信息发送到服务器:

SET NAMES utf8

注意,这正是'utf8',而不是'utf-8'。

如果你想在将来避免相关的问题,我建议你每次连接到mysql后都做SET NAMES utf8 - 它会为你节省很多痛苦。

答案 1 :(得分:2)

来自MySQL documentation

  

MySQL的默认字符集   客户端程序mysql,mysqladmin,   mysqlcheck,mysqlimport和mysqlshow   确定如下:

     
      
  • 在没有其他信息的情况下,程序会使用   编译的默认字符集,   通常 latin1
  •   
  • 这些程序支持--default-character-set option,   这使用户能够指定   明确要覆盖的字符集   无论客户端默认如何   确定。
  •   
     

当客户端连接到服务器时,   它发送字符集的名称   它想要使用。服务器使用   要设置的名称   character_set_client,   character_set_results,和   character_set_connection系统   变量。实际上,服务器   使用执行SET NAMES操作   字符集名称。

     

使用mysql客户端,如果你想   使用不同于的字符集   默认情况下,您可以显式执行   每次启动时SET NAMES。   但是,要达到同样的效果   更容易,你可以添加   --default-character-set选项   设置为您的mysql命令行或   在您的选项文件中。例如,   以下选项文件设置更改   三个与连接相关的角色   每次设置变量设置为koi8r   你调用mysql:

[mysql]
default-character-set=koi8r
     

如果您正在使用mysql客户端   启用自动重新连接(不是   推荐),最好使用   charset命令而不是SET NAMES。例如:

mysql> charset utf8
Charset changed
     

charset命令发出SET NAMES语句,并且还会更改   mysql使用的默认字符集   当它重新连接后   连接已经下降。