【问题标题】:MySQL charset needed需要 MySQL 字符集
【发布时间】:2011-01-25 11:57:32
【问题描述】:

我正在开发一个用于母语学习的应用程序。我需要将一些字符存储为“ẽũ”。我的数据库设置为带有默认排序规则的 utf-8 字符集,也是受此字符影响的表。

问题是当我尝试使用常规 SQL 插入添加一行时:

INSERT INTO text(spanish,guarani) VALUES('text','ẽũ');

这会引发警告:

Warning Code : 1366 Incorrect string value: '\xE1\xBA\xBD\xC5\xA9' for column 'guarani' at row 1

结果是“??”哪里有那些字符。

问题:这些字符不被 UTF-8 字符集覆盖?我需要哪一个?

注意:与 latin-1 相同的问题

谢谢。

【问题讨论】:

  • 您的连接使用什么排序规则?您从哪里发送查询?
  • 从标准 html 表单发送。通过PHP进行连接和通信。

标签: mysql utf-8


【解决方案1】:

!!!阅读http://www.joelonsoftware.com/articles/Unicode.html

必读。

读完之后,你应该问问自己:

  1. 连接使用什么编码。
  2. 排序规则使用什么语言环境。 (如果适用)。
  3. SQL 语句采用什么编码方式?
  4. 字符串文字采用什么编码方式?
  5. html 表单呈现的编码是什么?

【讨论】:

    【解决方案2】:

    与其他答案一样,您确实应该阅读并理解 Unicode 的基础知识。 这并不难,(一天之内你就能掌握),它是几乎每个程序员(当然也包括你)都需要的知识,它不是一时的知识,会让你的生活更简单、更快乐。

    这些字符不被覆盖 UTF-8 字符集?

    UTF-8 是一个 Unicode 字符集,Unicode 涵盖(实际上)每个字符。另一方面,MYSQL 的“utf8”编码不是真正的 UTF-8,它会遗漏一些字符(BMP 之外的字符)。但这不是你的问题。

    http://www.fileformat.info/info/unicode/char/1ebd/index.htm http://www.fileformat.info/info/unicode/char/169/index.htm

    你看到你的两个字符是有效的 Unicode,在 BMP 内(因此 Mysql 残缺的 'utf8' 应该支持它们),你甚至可以看到它是 UTF-8 编码。而且,如您所见,\xE1\xBA\xBD\xC5\xA9 似乎恰到好处。所以问题似乎出在其他地方。你确定你的数据库是utf8吗?

    【讨论】:

    • 原来是latin-1,后来改成utf-8进行测试。这种转换可能没有正确完成吗?使用此代码默认字符集 utf8
    • 原来什么是latin-1?它是如何何时何地更改为utf-8的? “默认字符集”在哪里应用,何时应用?
    • @Arafangion 我使用 MySQL 的 GUI 创建了数据库:SQLyog。然后通过命令行使用以下命令应用字符集的更改: ALTER DATABASE db_name DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-18
    • 2016-08-10
    • 2011-10-15
    • 2010-09-20
    • 1970-01-01
    相关资源
    最近更新 更多