Panelen



Forumnavigering
Senast inloggade
RSS
Sponsorer

Forum > Webbutveckling relaterat > Databaser och SQL

Problem: varchar hanteras som integer

Shadi
Shadi

Gradering

#21022

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.

Administratör på AspKoll.se!
Taggar: int, mysql, php, varchar,
ID: #21022 | Skapades: 2011-05-31 10:39:51 | Tråden har 4 svar och har lästs 326 gånger.

LP_MAXI
LP_MAXI

Gradering

#21023

Det 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. 

http://www.lpmaxi.se/
ID: #21023 | Skapades: 2011-05-31 11:15:37

Shadi
Shadi

Gradering

#21024

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!

 

Administratör på AspKoll.se!
ID: #21024 | Skapades: 2011-05-31 16:11:40

LP_MAXI
LP_MAXI

Gradering

#21025

Bra att det löste sig Shadi!

http://www.lpmaxi.se/
ID: #21025 | Skapades: 2011-05-31 19:40:58

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.

Kan man inte läsa och förstå min kod, kan man inte programmera - Christher Lenander
ID: #21027 | Skapades: 2011-05-31 20:43:10
© Copyright 2007-2009 Shadi Domat | Version 3.0 | Sidkarta | Policy