Wat is het beste gegevenstype voor telefoonnummer in MySQL en wat moet Java-typetoewijzing daarvoor zijn?

Ik gebruik MySQL met Spring JDBC-sjabloon voor mijn webtoepassing. Ik moet een telefoonnummer opslaan met alleen cijfers (10). Ik ben een beetje in de war over het gebruik van datatypes met datatype.

  1. Wat is het voorkeursgegevenstype ervoor in MySQL?
  2. Wat moet daarvoor het Java-gegevenstype in Bean (POJO)-klassen zijn?
  3. Hoe kan ik dat datatype valideren met javax-validaties/beperkingen voor lengte en ook alleen cijfers toegestaan?

Antwoord 1, autoriteit 100%

Snaren & VARCHAR.

  • Probeer telefoonnummers niet als echte nummers op te slaan. het zal de opmaak verpesten, voorgaande 0en en andere ongewenste dingen verwijderen.

  • U kunt, als u ervoor kiest, gebruikersinvoer beperken tot alleen numerieke waarden, maar zelfs in dat geval kunt u uw back-persistente gegevens behouden als tekens/tekenreeksen en niet als cijfers.

  • Wees je bewust van de wijdere wereld en hoe hun nummerlengtes en opmaak verschillen voordat je enige vorm van lengtebeperkingen, validaties of maskers probeert te implementeren (bijv. XXX-XXXX-XX).

  • Niet-numerieke tekens kunnen geldig zijn in telefoonnummers. Een goed voorbeeld is +als vervanging voor 00aan het begin van een internationaal nummer.

Bewerkt in uit gesprek in opmerkingen:

  • Het is een van de grotere fouten in de gebruikersinterface dat telefoonnummers iets met cijfers te maken hebben. Het is veel beter om ze te zien en te behandelen als adressen, het is dichter bij wat ze werkelijk zijn en vertegenwoordigen dan “telefoonnummers”.

Antwoord 2, autoriteit 25%

In MySQL -> INT(10) betekent niet een getal van 10 cijfers, het betekent een geheel getal met een weergavebreedte van 10 cijfers. De maximale waarde voor een INT in MySQL is 2147483647 (of 4294967295 indien niet ondertekend).

U kunt een BIGINT gebruiken in plaats van INT om deze op te slaan als een numeriek. Gebruik makend van
BIGINT bespaart u 3 bytes per rij over VARCHAR (10).

Als u “Land + gebied + nummer afzonderlijk” wilt opslaan. Probeer een VARCHAR (20) te gebruiken. Dit stelt u in staat om internationale telefoonnummers correct op te slaan, mocht dat nodig zijn.


Antwoord 3, autoriteit 17%

Overweeg het gebruik van de E.164-indeling. Voor volledige internationale ondersteuning heeft u een VARCHAR van 15 cijfers nodig.

Zie Aanbeveling van Twiliovoor meer informatie over lokalisatie van telefoonnummers.


Antwoord 4, autoriteit 6%

  1. varchar
  2. String

  3. Een eenvoudige regex. Zie: Hoe te controleren of een string alleen cijfers in Java. Gebruik javax.constraints.Pattern.


Antwoord 5, autoriteit 3%

VARCHAR met een lengte van waarschijnlijk 15-20 zou voldoende zijn en zou de beste optie zijn voor de database. Omdat u waarschijnlijk naast uw telefoonnummers verschillende koppeltekens en plustekens nodig heeft.


Antwoord 6

u kunt var-char,String en int gebruiken, het hangt van u af, als u alleen de landcode met mobiel nummer gebruikt, kunt u int gebruiken, als u een speciaal formaat voor nummer gebruikt, gebruik dan String of var-char type , als u var-char gebruikt, moet u de grootte van het nummer defileeren en beperken voor de gebruiker.


Antwoord 7

Het is allemaal gebaseerd op uw behoefte. als u een kleinschalige app ontwikkelt en alleen een specifieke regio (doelgroep) bestrijkt, kunt u BIGINT kiezen om alleen nummers op te slaan, aangezien VARCHAR meer byte verbruikt dan BIGINT (optimaal ontwerp van geheugengebruik is belangrijk). maar als u een grootschalige app ontwikkelt en zich richt op wereldwijde gebruikers en u beschikt over voldoende databasemogelijkheden om gegevens op te slaan, dan kunt u zeker voor VARCHAR kiezen.


Antwoord 8

  1. String
  2. Varchar

Dit is mijn mening over mijn database zoals aanbevolen door mijn mentor


Antwoord 9

Mijn vereiste is om een 10-cijferig telefoonnummer in de jsp weer te geven. Dus hier is de setup voor mij.
MySQL: numeric(10)

Java-kant:

@NumberFormat(pattern = "#")  
private long mobileNumber;

en het werkte!


Antwoord 10

In mysql: BIGINT.
In java: lang.

Other episodes