【问题标题】:How to store weird chars in the correct way in a MySQL DB如何在 MySQL DB 中以正确的方式存储奇怪的字符
【发布时间】:2015-10-26 07:28:40
【问题描述】:

我需要将一些数据存储在 MySQL 表中,但我遇到了这些字符的一些问题:“ā”“æ”“ō”“ĕ”(等等)

到目前为止,我将这些数据存储在 SQLlite 数据库中,这很好,因为一切都很好,但现在我试图将其导出到 MySQL DB 中,但奇怪的字符存储方式不是很好,甚至如果我尝试不同的字符编码。 (UTF-8、UTF-16、拉丁文等等) 有谁知道这样做的正确方法吗?

非常感谢!!

【问题讨论】:

    标签: mysql unicode utf-8 sqlite encode


    【解决方案1】:

    utf8需要在大约4个地方建立。

    • 数据库中的列 -- 使用SHOW CREATE TABLE 来验证它们是否显式设置为 utf8,或者从表定义中默认设置。 (改变数据库default是不够的。)
    • 客户端和服务器之间的连接。见SET NAMES utf8
    • 您拥有的字节数。
    • 如果您在网页中显示文本,请检查<meta> 标签。

    【讨论】:

      【解决方案2】:

      您可以切换到BLOB 数据类型,或者如果您坚持使用 TEXT/VARCHAR/CHAR,则需要更改表和数据库的字符集,如下所示。

      CREATE DATABASE mydbname
          CHARACTER SET utf8
          COLLATE utf8_general_ci;
      
      USE mydbname;
      
      CREATE TABLE `mytable` (
          `data` varchar(200) COLLATE utf8_unicode_ci NOT NULL
      ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
      

      如果您已经有一个带有utf8 字符集且排序规则设置为utf8_general_ci 的数据库,那么您可以简单地更改您的表,如下所述:

      ALTER TABLE `mytable` CHANGE `data` `data` VARCHAR(100) 
      CHARSET utf8 COLLATE utf8_general_ci DEFAULT '' NOT NULL;
      

      【讨论】:

      • 谢谢你!您的回答帮助我将数据存储到数据库中.. 但现在我无法以正确的方式进行选择.... 如果我执行选择操作并打印数据,我会看到很多奇怪的字符(但进入数据库他们现在好了)
      猜你喜欢
      • 2012-04-24
      • 2013-05-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-28
      相关资源
      最近更新 更多