不在 SQL table 中插入土耳其语字符。选择时显示 'xxx??xxx'

Not inserting Turkish characters in SQL table. Displays 'xxx??xxx' when selected

我想在我的 table 上添加土耳其名字,但是当显示时它给了我?而不是他们中的任何一个。对我在这里缺少的任何帮助吗?这是我的 table:

CREATE TABLE IF NOT EXISTS `offerings` (
  `dep` varchar(5) CHARACTER SET utf16 COLLATE utf16_turkish_ci DEFAULT NULL,
  `grade` varchar(4) CHARACTER SET utf16 COLLATE utf16_turkish_ci DEFAULT NULL,
  `section` varchar(3) CHARACTER SET utf16 COLLATE utf16_turkish_ci DEFAULT NULL,
  `name` varchar(100) CHARACTER SET utf16 COLLATE utf16_turkish_ci DEFAULT NULL,
  `teacher` varchar(50) CHARACTER SET utf16 COLLATE utf16_turkish_ci DEFAULT NULL,
  `quota` varchar(2) CHARACTER SET utf16 COLLATE utf16_turkish_ci DEFAULT NULL,
  `lec1` varchar(35) CHARACTER SET utf16 COLLATE utf16_turkish_ci DEFAULT NULL,
  `lec2` varchar(35) CHARACTER SET utf16 COLLATE utf16_turkish_ci DEFAULT NULL,
  `lec3` varchar(35) DEFAULT NULL,
  `lec4` varchar(35) DEFAULT NULL,
  `lec5` varchar(35) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf16;

正如我在此处选择的答案所建议的那样,无论谁用谷歌搜索此主题,都是问题的解决方案。特别感谢所有为解决我的问题做出贡献的人。

CREATE TABLE IF NOT EXISTS `offerings` (
  `dep` varchar(5) NOT NULL,
  `grade` varchar(4) COLLATE utf8_unicode_ci NOT NULL,
  `section` varchar(3) COLLATE utf8_unicode_ci NOT NULL,
  `name` varchar(100) COLLATE utf8_unicode_ci NOT NULL,
  `teacher` varchar(50) COLLATE utf8_unicode_ci NOT NULL,
  `quota` varchar(2) COLLATE utf8_unicode_ci,
  `lec1` varchar(35) DEFAULT NULL,
  `lec2` varchar(35) DEFAULT NULL,
  `lec3` varchar(35) DEFAULT NULL,
  `lec4` varchar(35) DEFAULT NULL,
  `lec5` varchar(35) DEFAULT NULL   
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

VARCHARs是字符串,而NVARCHARS是Unicode字符串。 NVARCHARS 每个字符需要更多位来存储,但范围更大。尝试更新您的数据类型。这应该可以解决您的问题。

编辑 这个答案是错误的。 OP 明确要求 MySQL 解决方案,但以上仅适用于 SQL 服务器。

(答案开始...)

请不要使用utf16;在 MySQL table.

中几乎没有理由这样做

所以,假设您切换到 utf8,让我们看看是否可以解决 ? 问题。

utf8需要在4处左右建立

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

可能发生了什么:

  • 你有 utf8 编码的数据(好)
  • SET NAMES latin1 生效(默认,但错误)
  • 该列已声明 CHARACTER SET latin1(默认,但错误)

由于 CHARACTER SET 不同意您所展示的内容,问题可能更复杂。请提供

 SELECT col, HEX(col) FROM tbl WHERE ...

一些带有土耳其语字符的简单单元格。有了这个,我也许就能弄清楚发生了什么。

此外,Reference notes on encodings