Forum > Webbutveckling relaterat > Databaser och SQL
Tjenare,
Jag har ett fält som heter "personnummer" i min MySql databas som är av typen "VARCHAR(20)". När jag sparar följande värden så fungerar det bra:
- 850113 (fungerar)
- 850113-1234 (fungerar)
Men när jag försöker att spara detta värde:
- 8501131234
Alltså, personnumret utan bindestreck, så fallerar det hela. Istället så sparas 2147483647 i fältet. När jag söker efter detta så verkar förklaringen vara att den siffran används när man försöker överskrida det tillåtna värdet på ett integer fält i databasen. Men jag använder inte integer, jag använder varchar.
Har någon stött på det här problemet eller har en lösning på detta?
Kan tillägga att jag har prövat att sätta en cast på variabeln, dvs
$pnr = (string)$_POST['pnr'];
Men det har inte fungerat heller.
| Skriv utDet vekar ju märkligt. Jag gjorde ett test nyss och det fungerade bra.
CREATE TABLE IF NOT EXISTS `demo` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`personnummer` varchar(20) COLLATE utf8_swedish_ci NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_swedish_ci AUTO_INCREMENT=4 ;
--
-- Dumping data for table `demo`
--
INSERT INTO `demo` (`id`, `personnummer`) VALUES
(1, '850113'),
(2, '850113-1234'),
(3, '8501131234');
SELECT * FROM DEMO;
id personnummer
1 850113
2 850113-1234
3 8501131234
SQL verkar klara av det i alla fall, är det i din PHP kod det smäller eller fungerar det att lägga in alla format du skrev direkt i SQL?
Varför har du varchar(20)? Ett personnnummer blir ju aldrig längre än 12 tecken. 13 om du räknar med bindestrecket.
Tack för svaret. Jag hittade problemet. Problemet kallas för Shadi.
jag har nämligen byggt ett system som ska känna av ifall värdet är en siffra eller inte, och i såfall så ska en (int) cast göras. Så det var jag som ställde till det för mig själv.
Problemet låg alltså inte i mysqls integer-begränsning, utan i PHP:s. Dvs att när php försöker cast:a personnumret (10-siffror) så blir den till 2147483647.
Det finns faktiskt ingen bra förklaring till varför det är varchar(20), det här systemet är byggt på det viset =/ Just nu är det ingen prio på db-optimering, får se om jag får ett sånt uppdrag framöver.
Men tack för ditt svar!
Bra att det löste sig Shadi!
Hade exakt dsetta problemet när jag skulle spara facebook id i databasen.
Fast jag fick problem både i php och i databasen, då facebook id inte är så små längre ;)
Var till ett projekt på jobbet, vi jobbar mycket med sociala medier, framför allt twitter och facebook.