web-dev-qa-db-ja.com

列MYSQLエラーにはデータが長すぎます

私はこの問題に関してスレッドをどんどん注いでいますが、それはクエリではなく行自体の問題ではないという点でユニークです。または、少なくとも行を修正する方法を説明する同様のトピックが見つかりませんでした。

次のような簡単なクエリ:

> update customer set customer_name = 'Health Net of CA' where customer_id = '15484';

結果:

ERROR 1406 (22001): Data too long for column 'customer_name' at row 1

文字長の確認:

mysql> select char_length(customer_name) from customer where customer_id = '15484';
+----------------------------+
| char_length(customer_name) |
+----------------------------+
|                         54 |
+----------------------------+
1 row in set (0.00 sec)

ショーの説明:

 | customer_name      | varchar(255) | YES  |     | NULL    |                |

このデータベースは、インポートを使用して入力されました。ストリクトモードがオンになっていることはかなり確かですが、自分でインポートを処理しなかったため、はっきりとは言えません。このテーブルには39列があり、ほとんどがVarchar(50)またはtinyintであるため、行が大きすぎても問題にはなりません。

これらの不良行を修正するための提案はありますか?

更新:

SHOW CREATE TABLE customer;
| customer | CREATE TABLE `customer` (
  `customer_id` int(11) NOT NULL AUTO_INCREMENT,
  `customer_name` varchar(255) DEFAULT NULL,
  `customer_code` varchar(12) DEFAULT NULL,
  `customer_type` text,
  `bill_type` text,
  `attention` varchar(100) DEFAULT NULL COMMENT 'Attention to who we deal biz with',
  `address_id` int(11) DEFAULT NULL,
  `b_bad_debt` tinyint(1) DEFAULT '0',
  `b_fee_approval` tinyint(1) DEFAULT NULL COMMENT 'boolean flag for Fee Approval 1=set, 0=unset',
  `approval_amount` decimal(5,2) DEFAULT NULL,
  `notification` varchar(45) DEFAULT NULL COMMENT 'notified customer by email / fax or ftp',
  `b_tax_exempt` tinyint(1) DEFAULT '0' COMMENT 'Tax Exempt Flag',
  `sales_tax_number` varchar(20) DEFAULT NULL COMMENT 'sales tax/ permit no.',
  `b_prepay` tinyint(1) DEFAULT NULL,
  `create_date` datetime DEFAULT NULL,
  `last_updated` timestamp NULL DEFAULT NULL,
  `active` tinyint(4) DEFAULT '1',
  `created_by` varchar(45) DEFAULT NULL,
  `updated_by` varchar(45) DEFAULT NULL,
  `email` varchar(45) DEFAULT NULL,
  `email_extra` mediumtext COMMENT 'extra emails as per creation',
  `state_tax_code` varchar(2) DEFAULT NULL COMMENT 'this is as CA if CA state and refer to TAX table',
  `email_verified_by` varchar(45) DEFAULT 'NA',
  `fax_verified_by` varchar(45) DEFAULT 'NA',
  `b_always_send` tinyint(1) DEFAULT '0' COMMENT 'there is customer that we need always send',
  `b_project_customer` tinyint(1) DEFAULT '0',
  `b_exception_list` tinyint(1) DEFAULT '0',
  `b_has_inslist` tinyint(1) DEFAULT '0',
  `customer_passwrd` varchar(255) DEFAULT NULL,
  `delivery_opt` varchar(45) DEFAULT NULL,
  `max_fax_pages` int(11) DEFAULT NULL,
  `phone` varchar(20) DEFAULT NULL,
  `fax` varchar(20) DEFAULT NULL,
  `phone_extra` mediumtext,
  `phone_second` varchar(20) DEFAULT NULL,
  `b_multi_suites` tinyint(1) DEFAULT '0',
  `suite_list` varchar(255) DEFAULT NULL,
  `b_portal_download` tinyint(1) DEFAULT '0',
  `b_no_download` tinyint(1) DEFAULT '0',
  PRIMARY KEY (`customer_id`),
  KEY `customer_idx` (`customer_code`,`customer_name`)
) ENGINE=InnoDB AUTO_INCREMENT=18870 DEFAULT CHARSET=utf8 |
2
RyanH

編集:

モードを変更するには

これは2つの方法で実行できます。

MySQLインストールディレクトリ内の「my.ini」ファイルを開き、テキスト「sql-mode」を探します。検索:

コード:

SQLモードをstrictに設定します

sql-mode = "STRICT_TRANS_TABLES、NO_AUTO_CREATE_USER、NO_ENGINE_SUBSTITUTION"置換:

コード:

SQLモードをstrictに設定します

sql-mode = "NO_AUTO_CREATE_USER、NO_ENGINE_SUBSTITUTION"または

PhpMyAdminなどのデータベース管理ツール内でSQLクエリを実行できます:コード:

SET @@ global.sql_mode = '';

投稿から: https://stackoverflow.com/questions/15949038/error-code-1406-data-too-long-for-column-mysql

2
Priyanka Kariya