Mysql
 sql >> база данни >  >> RDS >> Mysql

Автоматично подрязване на струните до правилната дължина при вложката

Всъщност MySQL съкращава низовете до ширината на колоната по подразбиране. Той генерира предупреждение, но позволява вмъкването.

mysql> create table foo (str varchar(10));
mysql> insert into foo values ('abcdefghijklmnopqrstuvwxyz');
Query OK, 1 row affected, 1 warning (0.00 sec)
mysql> show warnings;
+---------+------+------------------------------------------+
| Level   | Code | Message                                  |
+---------+------+------------------------------------------+
| Warning | 1265 | Data truncated for column 'str' at row 1 | 
+---------+------+------------------------------------------+
mysql> select * from foo;
+------------+
| str        |
+------------+
| abcdefghij | 
+------------+

Ако зададете строг SQL режим, той превръща предупреждението в грешка и отхвърля вмъкването.

Относно вашия коментар:SQL режимът е конфигурация на MySQL сървър. Вероятно не PDO го причинява, но от друга страна е възможно, защото всеки клиент може да зададе SQL режим за своята сесия.

Можете да извлечете текущата глобална или сесия sql_mode стойност със следните изрази:

SELECT @@GLOBAL.sql_mode;
SELECT @@SESSION.sql_mode;

По подразбиране трябва да е празен низ (не са зададени режими). Можете да зададете режим SQL във вашия my.cnf файл, с --sql-mode опция за mysqld или с помощта на SET изявление.

Актуализация:MySQL 5.7 и по-нови задават строг режим по подразбиране. Вижте https://dev.mysql.com/doc/ refman/5.7/en/sql-mode.html



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Създаване на тип променлива ENUM в MySQL

  2. Вземете последния ред за даден идентификатор

  3. Как мога да избера реда с най-висок идентификатор в MySQL?

  4. GROUP_CONCAT с ограничение

  5. Защо Rails добавя `OR 1=0` към заявки, използвайки хеш синтаксиса на клаузата where с диапазон?