Mysql - 插入 N'...'

标签 mysql

这是一个mysql的小题,但是最近在看一个SO题的时候发现了一个不懂的查询

mysql_query("SET CHARACTER SET utf8");
mysql_query("insert into users (username,pass,fname,lname,phone,city) VALUES (N'$email',N'$pass',N'$fname',N'$lname',N'$phone',N'$city')");

插入查询中的 N'...' 是什么意思? 在处理 UTF8 时是否需要这样做?

如果我必须编写相同的查询,我会这样写:

mysql_query("insert into users (username,pass,fname,lname,phone,city) VALUES ('$email','$pass','$fname','$lname','$phone','$city')");

两者有什么区别?

最佳答案

NVarchar是用于 Unicode 的数据类型。如果您的数据库不存储多语言数据,那么您可以继续使用 Varchar。例如:N'abc'(如您的情况)只是将您的字符串转换为 unicode。

默认情况下,SQL 服务器对 varchar 使用 Windows-1252 字符代码。它包含大多数拉丁语系语言(英语、德语、法语等)的字符,但不包含非拉丁语系语言(波兰语、俄语等)的字符。如上所述,nvarchar 用于解决该问题,因为它适用于包含那些缺失字符的 Unicode。这是有代价的,存储 nvarchar 所占用的空间是 varchar 的两倍。

将 N 放在字符串前面可确保字符在放入 nvarchar 列之前转换为 Unicode。大多数时候你可以把 N 关掉,但我不推荐它。安全总比遗憾好得多。

关于Mysql - 插入 N'...',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28238180/

相关文章:

mysql - 在 Open Query SQL 语句中指定表

php - Laravel 中跨多个数据库的 belongsToMany 关系

MySQL 查询合并两个表和其中一个表中的两列

php - 用于使用 Google Cloud 消息传递的 API 的数据结构

c# - 更改数据表列的类型

mysql - 这个简单的左连接操作不起作用,但为什么呢?

java - 如何在 JDBC 中使用 Mysql 行构造函数进行查询?

MySQL 带条件的 DELETE 查询

php - 如何在多维 PHP 数组中有效定位键值对?

php - 将从字符串中选择 '2' 而不是 '12' 的 LIKE 子句