that change every millisecond
First of all, that would require a display update frequency of 1000Hz to be even representable. No display in the world is that fast. The fastest displays around manage some 200Hz. So don't even think about updating your timer display at that rate.
An important rule about displays is: Don't display more digits than you can actually accurately measure. The accuracy of display updates is in the order of 1/10s of a second, so you should display only that much.
If you want to store a screenshot of a game, then the game update tick interval determines the accuracy. Usually no more than 100Hz, i.e. 1/100 of a second.
Now since you don't want to upload a new string texture every frame, the common way to go about this are glyph texture atlases, i.e. a texture with every glyph you want to render in it, from which you then draw quads addresses the respective characters by their texture coordinate. To save on texture memory you can use some method like Distance Fields (implemented for example in libGDX).
Also I recommend reading this SO answer on OpenGL text rendering methods