【问题标题】:mysql insert error with uft-8 unicodemysql 使用 uft-8 unicode 插入错误
【发布时间】:2010-12-17 15:05:55
【问题描述】:

我想插入一些简单的数据 查询是: 插入categories_lang(category_id,language_id,name,description,alias) 值 (7,'nl','éésgdsfgsdfgdfsgë','','') 查询是正确的 当我插入普通字符时它可以工作(没有像ë和é这样的法语单词)。 但是当我这样做时,查询会在表中插入一个空的描述字段。

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

这里有什么问题?

谢谢

【问题讨论】:

    标签: mysql unicode utf-8


    【解决方案1】:

    来自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 使用的默认字符集 当它重新连接后 连接已断开。

    【讨论】:

      【解决方案2】:

      在执行你的查询之前,将这个发送到服务器:

      SET NAMES utf8
      

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

      如果你以后想避免相关的问题,我建议你每次连接mysql后都做SET NAMES utf8 - 这样可以省去很多痛苦。

      【讨论】:

      • 这到底是做什么的? “名字”是什么意思?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-07-05
      • 2011-08-05
      • 1970-01-01
      • 2013-03-01
      • 2011-08-12
      • 2013-06-17
      • 2016-07-30
      相关资源
      最近更新 更多