这是一个小小的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')");
两者之间有什么区别?
答案 0 :(得分:0)
NVarchar是用于Unicode的数据类型。如果您的数据库没有存储多语言数据,那么您可以继续使用Varchar。例如:N'abc'(在您的情况下)只是将您的字符串转换为unicode。
默认情况下,SQL Server将Windows-1252字符代码用于varchar。它包含基于拉丁语言的大多数字符(英语,德语,法语等)但它不包含非拉丁语言(波兰语,俄语等)的字符。如上所述,nvarchar用于解决该问题,因为它适用于包含缺少字符的Unicode。这需要付出代价,存储nvarchar的空间是varchar的两倍。
将N放在字符串前面可确保在放入nvarchar列之前将字符转换为Unicode。大部分时间你都可以离开N,但我不推荐它。安全而不是抱歉要好得多。