mysql - FreeTDS UTF-8 插入 mysql

标签 mysql sql-server symfony doctrine freetds

我有一台安装了 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 的 Doctrine 配置。

charset: utf8mb4
          default_table_options:
              charset: utf8mb4
              collate: utf8mb4_unicode_ci

外部 mssql 数据库的 doctrine 配置:

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 with doctrine 的错误。 直到现在我在阅读时都没有问题,如果我在网上输出结果,像 ø 这样的特殊字符带有 � 符号。 在调用之前我必须进行转换

$entityManager->persist($object);
$entityManager->flush();

最佳答案

为 doctrine 配置设置字符集为 utf8mb4 就可以了。

关于mysql - FreeTDS UTF-8 插入 mysql,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44355193/

相关文章:

mysql - 错误:Cannot enqueue Query after invoking quit in MySQL with NodeJS

mysql - 使用 DBI 和 dbGetQuery 时有没有办法使 MySql 查询超时?

sql-server - 如何合并两个 SELECT 语句的结果

php - 所有检查返回false后无法退出循环

php - 没有外键约束的 Doctrine 2 关联

php - 为什么我的 PHP 注册不起作用?

sql - 多个表的 View 。需要删除1个表定义的 "doubles"

sql-server - SQL Server 2014 升级顾问失败

php - 带有服务器端 PHP 模板的 ReactJS?

php - 如何计算 MySQL 表中的行数 (PHP PDO)