2015-12-22 12 views
7

Aşağıdaki tablo yapısı vardır: manuel ilk yönetici ayarlamak için benim uygulamanın kullanıcı arayüzünden bir kullanıcı oluşturmak kez Ardından"HATA 1406: 1406: Sütun için veriler çok uzun" ama olmamalı?

DROP TABLE IF EXISTS `tblusers`; 
/*!40101 SET @saved_cs_client  = @@character_set_client */; 
/*!40101 SET character_set_client = utf8 */; 
CREATE TABLE `tblusers` (
    `UserID` int(5) NOT NULL AUTO_INCREMENT, 
    `ContactPersonID` int(5) NOT NULL, 
    `NameOfUser` varchar(70) NOT NULL, 
    `LegalForm` varchar(70) DEFAULT NULL, 
    `Address` varchar(70) DEFAULT NULL, 
    `City` varchar(50) DEFAULT NULL, 
    `Postal` int(8) DEFAULT NULL, 
    `Country` varchar(50) DEFAULT NULL, 
    `VatNum` int(10) DEFAULT NULL, 
    `Username` varchar(30) NOT NULL, 
    `Password` varchar(20) NOT NULL, 
    `Email` varchar(40) NOT NULL, 
    `Website` varchar(40) DEFAULT NULL, 
    `IsSeller` bit(1) DEFAULT NULL, 
    `IsBuyer` bit(1) DEFAULT NULL, 
    `IsAdmin` bit(1) DEFAULT NULL, 
    `Description` text, 
    PRIMARY KEY (`UserID`), 
    KEY `ContactPersonID` (`ContactPersonID`), 
    CONSTRAINT `tblusers_tblpersons` FOREIGN KEY (`ContactPersonID`) REFERENCES `tblpersons` (`PersonID`) 
) ENGINE=InnoDB AUTO_INCREMENT=87 DEFAULT CHARSET=latin1; 
/*!40101 SET character_set_client = @saved_cs_client */; 

, ben var ve bu doğrudan yapıyorum tek zaman

UPDATE `tblusers` SET `IsAdmin`='1' WHERE `UserID`='79'; 

ama sonra olsun: DB'den, her şey UI (verilmesi yönetici ayrıcalıkları) den yapılması öngörülmüştür

Operation failed: There was an error while applying the SQL script to the database. 
Executing: 
UPDATE `trace`.`tblusers` SET `IsAdmin`='1' WHERE `UserID`='79'; 

ERROR 1406: 1406: Data too long for column 'IsAdmin' at row 1 
SQL Statement: 
UPDATE `trace`.`tblusers` SET `IsAdmin`='1' WHERE `UserID`='79' 

Anlamsız olan, çünkü diğer makinelerde aynı şeyi yapıyorum ve bir çekicilik gibi çalışıyor. Tek fark şudur ki bu senaryoda mysql 5.7 sunucum var, ancak makinelerde 5.6 versiyon var.

following çözümünü denedim, ancak benim için çalışmadı. Bunun yanı sıra, my.ini dosyası, çalıştığı 5.6 makinede değişmez.

5.6'ya düşürme söz konusu değildir. Burada gerçek bir çözüme ihtiyacım var lütfen.

cevap

12

isadmin, bit türünde bir sütundur ve'dan daha büyük boyutta varchar türünde bir değer depolarsınız. aşağıdaki gibi sorguyu değiştirin: -

UPDATE `tblusers` SET `IsAdmin`=b'1' WHERE `UserID`='79'; 
9

IsAdmin bit (1) ait veri türü vardır, henüz dize atama '1' ona.

UPDATE `tblusers` SET `IsAdmin`=b'1' WHERE `UserID`='79'; 

veya

UPDATE `tblusers` SET `IsAdmin`=0b1 WHERE `UserID`='79'; 

Bu davranışın nedeni muhtemelen bu strict_all_tables or strict_trans_tables ayar etkinleştirildiğinde şudur: b veya kullanım 0b biçimi ile '1' -Önceki tarafından kendisine bir bit value atama olduğuna işaret v5.7 MySQL sunucusu:

düzey modu MySQL böyle INSERT veya UPDATE olarak veri değişim tablolara geçersiz veya eksik değerleri nasıl işleyeceğini kontrol eder. Bir değer, çeşitli nedenlerle geçersiz olabilir. Örneğin, sütun için yanlış veri türü olabilir veya aralık dışı olabilir. Yeni bir satır eklenecek bir eksik bir değer, tanımında hiçbir açık DEFAULT yan tümcesi olmayan bir NULL sütun için bir değer içermiyor. ( NULL sütunu için, değer eksikse NULL eklenir.) Sıkı mod , CREATE TABLE gibi DDL deyimlerini de etkiler.