【发布时间】:2015-09-29 17:26:17
【问题描述】:
我可以在数据库的列名中使用 UTF-8 名称吗?就像这里的例子:
$zapytaj = mysql_query("SELECT * FROM users WHERE `użytkownicy` = '$nazwaużytkownika' ");
这给了我错误:
“where 子句”中的未知列“użytkownicy”
有人可以解释为什么这不起作用吗?
mysql> SHOW VARIABLES LIKE 'character%';
+--------------------------+-------------
| Variable_name | Value
+--------------------------+-------------
| character_set_client | utf8mb4
| character_set_connection | utf8mb4
| character_set_database | utf8mb4
| character_set_filesystem | binary
| character_set_results | utf8mb4
| character_set_server | latin1
| character_set_system | utf8
mysql> SELECT COLUMN_NAME, HEX(COLUMN_NAME)
FROM information_schema.columns WHERE table_name = "so31349641";
+--------------+--------------------------+
| COLUMN_NAME | HEX(COLUMN_NAME) |
+--------------+--------------------------+
| id | 6964 |
| użytkownicy | 75C5BC79746B6F776E696379 | -- Note the C5BC for ż
| hasło | 686173C5826F | -- and the C582 for ł
+--------------+--------------------------+
如果我从 użytkownicy 中删除 `` 我会看到以下错误:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '�ytkownicy = 'xxx'' at line 1
也许PHP文件没有UTF8编码?如何在 PHPStorm 中查看这个文件?
!SOLUTION!
如果您遇到此错误,只需将 mysql 更改为 PDO 即可解决您的问题。
【问题讨论】:
-
你使用的是什么字符集?
-
请提供
SHOW CREATE TABLE users; -
@RickJames
CREATE TABLEusers(idint(11) NOT NULL AUTO_INCREMENT,użytkownicyvarchar(24) NOT NULL,hasłovarchar(24) NOT NULL,主键 (id) ) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8mb4