【发布时间】:2017-06-04 14:32:48
【问题描述】:
我有一个安装了 symfony 框架的 mysql 的 linux 服务器。 现在我正在尝试从 sql server 2012 获取数据并且一切正常,除非我尝试在 mysql 数据库中插入值。
SQLSTATE[HY000]: General error: 1366 Incorrect string value: '\x80 IN P...' for column 'note_anagrafica' at row 1
似乎问题出在数据转换上。
我试图插入数据的mysql中列的数据类型是:
text
排序规则是:
utf8_unicode_ci
FreeTds 配置设置为 UTF-8,驱动程序为 odbc。
有人有解决这个问题的方法吗?
编辑:
odbc.ini
[server]
Driver = FreeTDS
Server = x.x.x.x
Port = 1234
Database = databasename
TDS_Version = 8
client charseg = UTF-8
server charset = CP1252
freetds.conf
[server]
host = x.x.x.x
port = 1234
tds version = 8.0
client charset = UFT-8
text size = 20971520
use uft-16 = true
mysql 的教义配置。
charset: utf8mb4
default_table_options:
charset: utf8mb4
collate: utf8mb4_unicode_ci
外部 mssql 数据库的原则配置:
server:
driver_class: Lsw\DoctrinePdoDblib\Doctrine\DBAL\Driver\PDODblib\Driver
host: "%a_database_host%"
port: "%a_database_port%"
dbname: "%a_database_name%"
user: "%a_database_user%"
password: "%a_database_password%"
charset: utf8mb4
从现在开始,当我尝试将数据插入 mysql 时出现错误,来自 sql server 2012 的学说。 到目前为止,我在阅读 execpt 时没有问题,如果我在网上看到结果,像 ø 这样的特殊字符带有 � 符号。 在通话之前我必须进行转换
$entityManager->persist($object);
$entityManager->flush();
【问题讨论】:
-
您是否将文本列
note_anagrafica创建为CHARACTER SET utf8或CHARACTER SET utf8mb4? -
我在列上设置了 utf8mb4 但我认为问题出在 freetds 因为如果我在浏览器上显示查询结果我会看到 ?关于这些特殊字符
-
您是否尝试将
client charset = UTF-8放入您的freetds.conf? SQL Server 2012 列类型是NVARCHAR或NTEXT而不是VARCHAR或TEXT? -
是的,我尝试在 freetds 中插入 UTF-8,列是文本,但是 sql server 的排序规则是 sql_latin1_general_cp_cs_as 是正确的 UFT-8 转换吗?
-
我很确定 SQL Server 中的列必须是
NTEXT才能显示 Unicode,而不管排序规则如何。您是否能够在 SQL Server 的列中选择或插入 Unicode 作为 TEXT 列?
标签: mysql sql-server symfony doctrine freetds